#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextCharFormat>
#include<QTextEdit>

#include <QtPrintSupport/QPrinter>//打印
#include <QtPrintSupport/QPrintDialog>//打印对话框
#include <QtPrintSupport/QPrintPreviewDialog> //打印预览对话框

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

//字符串转换成枚举类型
//1、命名空间
namespace ActKind{//命名该空间为ActKind
Q_NAMESPACE//2、用一个宏来标识我们的命名空间

//3、定义一个枚举类型--enum
//菜单栏上的字符串
enum ActionKind {

    NewFile,//新建文件
    OpenFile,//打开文件
    SaveFile,//保存文件
    SaveAsFile,//另存文件
    Quit,//退出
    Cut,//剪切
    Copy,//复制
    Paste,//粘贴
    Undo,//撤销
    SelectAll,//全选
    //——————
    PrintFile,//打印文件
    PrintPreviewFile,//打印预览
    Bold,//加粗
    Italic,//倾斜
    UnderLine,//下划线
    LeftAlignment,//左对齐
    CenterAlignment,//居中
    RightAlignment,//右对齐
    JustifiedAlignment,//两端对齐
    Color,//颜色
    Close,//关闭当前文件
    CloseAllWindows,//关闭所有窗口
    Tile,//平铺
    Cascade,//层叠
    Next,//下一个
    Previous,//前一个
    About,//关于
    AboutQt,//关于Qt
};

//4、用一个宏将这些枚举注册到Qt的元对象系统里面
//这样可以完成通过Qt的元对象系统将字符串转成枚举、枚举转成字符串的一个操作
Q_ENUM_NS(ActionKind)
}


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void OnActionTriggter(QAction* act);//这是最外面的那个框架（菜单栏的）   //选中槽函数命名，Alt+Enter再Enter可以定义该槽函数到mainwindow.cpp
    void OnNewFile();//这是新建文件要执行的内容 //Alt+Enter再Enter，添加一下定义
    void OnOpenFile();//这是打开文件要执行的内容
    bool OnSave();//这是用于可能要保存（MaybeSave()）的提示框里的“保存”按钮//保存是否成功
    bool OnSaveAs();//这里始于OnSave中，当前文件没有当前位置路径（cur_file为空），需要另存为的条件下是否能成功//另存是否成功
    void OnBold();//加粗
    void mergeFormat(QTextCharFormat fmt);//光标
    void OnItalic();//倾斜
    void OnUnderLine();//下划线
    void OnLeftAlignment();//左对齐
    void OnRightAlignment();//右对齐
    void OnCenterAlignment();//居中
    void OnJustifiedAlignment();//两端对齐
    void on_fontComboBox_currentFontChanged(const QFont &f);//字体
    void on_sizeComboBox_currentTextChanged(const QString &arg1);//字体大小
    void onFontColor();//字体颜色
    void OnPrint();//打印
    void OnPrintPreviewHelp(QPrinter *printer);//帮助打印预览
    void OnPrintPreview();//打印预览
    void OnAbout();//关于
    void OnAboutQt();//关于Qt

private:
    bool MaybeSave();//这是创建文件中的辅助函数--判断是否有当前文件需要保存//Alt+Enter再Enter添加一下定义
    void LoadFile(const QString& path);//这是OnOpenFile的辅助函数，要加载文件//传递一个文件名进来
    bool SaveFile(const QString& path);//这是OnSave中的辅助函数，用于将当前文件写入文件夹//需要把文件的路径传进来
    void mergeTextFormat(const QTextBlockFormat& format);

private:
    Ui::MainWindow *ui;
    QString cur_file;//先将当前的这个位置路径先保存起来//OnSave中用到
    bool boldcheck = true; // 添加成员变量定义
    bool Italiccheck = true;
    bool UnderLinecheck = true;// 声明并初始化
    QTextEdit* textEdit;  // 声明成员变量保存文本编辑框指针
    int m_currentPage;
};
#endif // MAINWINDOW_H
